--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 1ed9d0d611f6358718fadfa98a94b3c100d30c4e
Parents : d8d1475
Author : Sudo-Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-03-06T00:36:58-06:00
Add localization for Contacts management
Changes
4 files changed, 220 insertions(+), 4 deletions(-)
Diff
diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 16beb311..a224dc1f 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -31,6 +31,7 @@
"sync_messages": "Nachrichten synchronisieren",
"compose": "Verfassen",
"messages": "Nachrichten",
+ "contacts": "Kontakte",
"nomad_network": "Nomad Network",
"map": "Karte",
"archives": "Archive",
@@ -319,7 +320,59 @@
"failed_create": "Failed to create identity",
"switch_scheduled": "Switch scheduled. Reloading application...",
"failed_switch": "Failed to switch identity",
- "failed_delete": "Failed to delete identity"
+ "failed_delete": "Failed to delete identity",
+ "key_control": "Identity key control",
+ "export_key_file": "Export key file",
+ "copy_base32": "Copy Base32 key",
+ "upload_key_file": "Upload key file",
+ "paste_base32": "Paste Base32",
+ "paste_base32_placeholder": "Paste your base32 identity key here...",
+ "confirm_restore": "Confirm restore",
+ "restoring": "Restoring...",
+ "identity_exported": "Identity key file exported",
+ "identity_copied": "Identity Base32 key copied to clipboard",
+ "identity_export_failed": "Failed to export identity",
+ "identity_copy_failed": "Failed to copy identity",
+ "identity_restored": "Identity imported.",
+ "identity_restore_failed": "Identity restore failed",
+ "no_identity_available": "No identity available",
+ "message_count": "{count} messages"
+ },
+ "contacts": {
+ "title": "Kontakte",
+ "description": "Kontaktliste verwalten und Identitäten teilen/importieren.",
+ "search_placeholder": "Kontakte suchen...",
+ "actions": "Aktionen",
+ "no_contacts": "Keine Kontakte gefunden",
+ "load_more": "Mehr laden",
+ "add_contact": "Kontakt hinzufügen",
+ "contact_name_optional": "Kontaktname (optional)",
+ "contact_name_placeholder": "z.B. Feldknoten",
+ "hash_or_uri": "LXMF-Hash oder URI",
+ "hash_or_uri_placeholder": "32-Zeichen-Hash, lxmf://... oder lxma://...",
+ "paste": "Einfügen",
+ "failed_load_contacts": "Kontakte konnten nicht geladen werden",
+ "invalid_contact_input": "Ungültige Eingabe. 32-Zeichen-Hash oder lxma://-URI verwenden.",
+ "contact_already_exists": "Kontakt existiert bereits",
+ "contact_added": "Kontakt hinzugefügt",
+ "failed_add_contact": "Kontakt konnte nicht hinzugefügt werden",
+ "remove_contact": "Kontakt entfernen",
+ "remove_contact_confirm": "Diesen Kontakt entfernen?",
+ "contact_removed": "Kontakt entfernt",
+ "failed_remove_contact": "Kontakt konnte nicht entfernt werden",
+ "share_contact": "Kontakt-URI teilen",
+ "copy_contact_uri": "Kontakt-URI kopieren",
+ "contact_uri_copied": "Kontakt-URI in Zwischenablage kopiert",
+ "failed_build_contact_uri": "Share-URI für diesen Kontakt konnte nicht erstellt werden",
+ "share_my_identity": "Meine Identität teilen",
+ "identity_uri_copied": "Identitäts-URI in Zwischenablage kopiert",
+ "share": "Teilen",
+ "scan_qr": "QR-Code scannen",
+ "scanner_hint": "Kamera auf einen Identitäts-QR-Code richten.",
+ "camera_not_supported": "Kamera-QR-Scan wird in diesem Browser nicht unterstützt.",
+ "camera_failed": "Kamera konnte nicht gestartet werden.",
+ "qr_scanned": "QR-Code gescannt",
+ "importing_lxma": "LXMA-Kontakt wird importiert..."
},
"about": {
"title": "Über",
@@ -396,6 +449,7 @@
"manage": "Verwalten",
"description": "Suchen, filtern und exportieren Sie Ihre Reticulum-Adapter.",
"add_interface": "Schnittstelle hinzufügen",
+ "edit_interface": "Schnittstelle bearbeiten",
"import": "Importieren",
"export_all": "Alle exportieren",
"search_placeholder": "Suche nach Name, Typ, Host...",
diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index bdf72cc9..9e351ab9 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -31,6 +31,7 @@
"sync_messages": "Sync Messages",
"compose": "Compose",
"messages": "Messages",
+ "contacts": "Contacts",
"nomad_network": "Nomad Network",
"map": "Map",
"archives": "Archives",
@@ -319,7 +320,23 @@
"failed_create": "Failed to create identity",
"switch_scheduled": "Switch scheduled. Reloading application...",
"failed_switch": "Failed to switch identity",
- "failed_delete": "Failed to delete identity"
+ "failed_delete": "Failed to delete identity",
+ "key_control": "Identity key control",
+ "export_key_file": "Export key file",
+ "copy_base32": "Copy Base32 key",
+ "upload_key_file": "Upload key file",
+ "paste_base32": "Paste Base32",
+ "paste_base32_placeholder": "Paste your base32 identity key here...",
+ "confirm_restore": "Confirm restore",
+ "restoring": "Restoring...",
+ "identity_exported": "Identity key file exported",
+ "identity_copied": "Identity Base32 key copied to clipboard",
+ "identity_export_failed": "Failed to export identity",
+ "identity_copy_failed": "Failed to copy identity",
+ "identity_restored": "Identity imported.",
+ "identity_restore_failed": "Identity restore failed",
+ "no_identity_available": "No identity available",
+ "message_count": "{count} messages"
},
"about": {
"title": "About",
@@ -396,6 +413,7 @@
"manage": "Manage",
"description": "Search, filter and export your Reticulum adapters.",
"add_interface": "Add Interface",
+ "edit_interface": "Edit Interface",
"import": "Import",
"export_all": "Export all",
"search_placeholder": "Search by name, type, host...",
@@ -1382,6 +1400,42 @@
"ringtone_saved": "Ringtone saved successfully",
"failed_save_ringtone": "Failed to save edited ringtone"
},
+ "contacts": {
+ "title": "Contacts",
+ "description": "Manage your contact list and share/import identities.",
+ "search_placeholder": "Search contacts...",
+ "actions": "Actions",
+ "no_contacts": "No contacts found",
+ "load_more": "Load more",
+ "add_contact": "Add Contact",
+ "contact_name_optional": "Contact Name (Optional)",
+ "contact_name_placeholder": "e.g. Field Node",
+ "hash_or_uri": "LXMF Hash or URI",
+ "hash_or_uri_placeholder": "32-char hash, lxmf://..., or lxma://...",
+ "paste": "Paste",
+ "failed_load_contacts": "Failed to load contacts",
+ "invalid_contact_input": "Invalid input. Use a 32-char hash or lxma:// URI.",
+ "contact_already_exists": "Contact already exists",
+ "contact_added": "Contact added",
+ "failed_add_contact": "Failed to add contact",
+ "remove_contact": "Remove Contact",
+ "remove_contact_confirm": "Remove this contact?",
+ "contact_removed": "Contact removed",
+ "failed_remove_contact": "Failed to remove contact",
+ "share_contact": "Share Contact URI",
+ "copy_contact_uri": "Copy Contact URI",
+ "contact_uri_copied": "Contact URI copied to clipboard",
+ "failed_build_contact_uri": "Could not build a share URI for this contact",
+ "share_my_identity": "Share My Identity",
+ "identity_uri_copied": "Identity URI copied to clipboard",
+ "share": "Share",
+ "scan_qr": "Scan QR Code",
+ "scanner_hint": "Point camera at an identity QR code.",
+ "camera_not_supported": "Camera QR scanning is not supported in this browser.",
+ "camera_failed": "Failed to start camera scanner.",
+ "qr_scanned": "QR code scanned",
+ "importing_lxma": "Importing LXMA contact..."
+ },
"tutorial": {
"title": "Getting Started",
"welcome": "Welcome to",
diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 3fcc1111..2622be9e 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -31,6 +31,7 @@
"sync_messages": "Sincronizza Messaggi",
"compose": "Componi",
"messages": "Messaggi",
+ "contacts": "Contatti",
"nomad_network": "Nomad Network",
"map": "Mappa",
"archives": "Archivi",
@@ -319,7 +320,59 @@
"failed_create": "Impossibile creare l'identità",
"switch_scheduled": "Cambio programmato. Ricaricando l'applicazione...",
"failed_switch": "Impossibile cambiare identità",
- "failed_delete": "Impossibile eliminare l'identità"
+ "failed_delete": "Impossibile eliminare l'identità",
+ "key_control": "Identity key control",
+ "export_key_file": "Export key file",
+ "copy_base32": "Copy Base32 key",
+ "upload_key_file": "Upload key file",
+ "paste_base32": "Paste Base32",
+ "paste_base32_placeholder": "Paste your base32 identity key here...",
+ "confirm_restore": "Confirm restore",
+ "restoring": "Restoring...",
+ "identity_exported": "Identity key file exported",
+ "identity_copied": "Identity Base32 key copied to clipboard",
+ "identity_export_failed": "Failed to export identity",
+ "identity_copy_failed": "Failed to copy identity",
+ "identity_restored": "Identity imported.",
+ "identity_restore_failed": "Identity restore failed",
+ "no_identity_available": "No identity available",
+ "message_count": "{count} messages"
+ },
+ "contacts": {
+ "title": "Contatti",
+ "description": "Gestisci la tua rubrica e condividi/importa identità.",
+ "search_placeholder": "Cerca contatti...",
+ "actions": "Azioni",
+ "no_contacts": "Nessun contatto trovato",
+ "load_more": "Carica altri",
+ "add_contact": "Aggiungi contatto",
+ "contact_name_optional": "Nome contatto (opzionale)",
+ "contact_name_placeholder": "es. Nodo di campo",
+ "hash_or_uri": "Hash LXMF o URI",
+ "hash_or_uri_placeholder": "Hash 32 caratteri, lxmf://... o lxma://...",
+ "paste": "Incolla",
+ "failed_load_contacts": "Impossibile caricare i contatti",
+ "invalid_contact_input": "Input non valido. Usa un hash di 32 caratteri o URI lxma://.",
+ "contact_already_exists": "Il contatto esiste già",
+ "contact_added": "Contatto aggiunto",
+ "failed_add_contact": "Impossibile aggiungere il contatto",
+ "remove_contact": "Rimuovi contatto",
+ "remove_contact_confirm": "Rimuovere questo contatto?",
+ "contact_removed": "Contatto rimosso",
+ "failed_remove_contact": "Impossibile rimuovere il contatto",
+ "share_contact": "Condividi URI contatto",
+ "copy_contact_uri": "Copia URI contatto",
+ "contact_uri_copied": "URI contatto copiato negli appunti",
+ "failed_build_contact_uri": "Impossibile creare un URI per questo contatto",
+ "share_my_identity": "Condividi la mia identità",
+ "identity_uri_copied": "URI identità copiato negli appunti",
+ "share": "Condividi",
+ "scan_qr": "Scansiona QR",
+ "scanner_hint": "Inquadra il codice QR dell'identità con la fotocamera.",
+ "camera_not_supported": "La scansione QR con fotocamera non è supportata in questo browser.",
+ "camera_failed": "Impossibile avviare la fotocamera.",
+ "qr_scanned": "Codice QR scansionato",
+ "importing_lxma": "Importazione contatto LXMA..."
},
"about": {
"title": "Informazioni",
@@ -396,6 +449,7 @@
"manage": "Gestisci",
"description": "Cerca, filtra ed esporta i tuoi adattatori Reticulum.",
"add_interface": "Aggiungi Interfaccia",
+ "edit_interface": "Modifica Interfaccia",
"import": "Importa",
"export_all": "Esporta tutto",
"search_placeholder": "Cerca per nome, tipo, host...",
diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 9f3d2e84..a9117d4f 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -31,6 +31,7 @@
"sync_messages": "Синхронизировать сообщения",
"compose": "Написать",
"messages": "Сообщения",
+ "contacts": "Контакты",
"nomad_network": "Nomad Network",
"map": "Карта",
"archives": "Архивы",
@@ -319,7 +320,59 @@
"failed_create": "Failed to create identity",
"switch_scheduled": "Switch scheduled. Reloading application...",
"failed_switch": "Failed to switch identity",
- "failed_delete": "Failed to delete identity"
+ "failed_delete": "Failed to delete identity",
+ "key_control": "Identity key control",
+ "export_key_file": "Export key file",
+ "copy_base32": "Copy Base32 key",
+ "upload_key_file": "Upload key file",
+ "paste_base32": "Paste Base32",
+ "paste_base32_placeholder": "Paste your base32 identity key here...",
+ "confirm_restore": "Confirm restore",
+ "restoring": "Restoring...",
+ "identity_exported": "Identity key file exported",
+ "identity_copied": "Identity Base32 key copied to clipboard",
+ "identity_export_failed": "Failed to export identity",
+ "identity_copy_failed": "Failed to copy identity",
+ "identity_restored": "Identity imported.",
+ "identity_restore_failed": "Identity restore failed",
+ "no_identity_available": "No identity available",
+ "message_count": "{count} messages"
+ },
+ "contacts": {
+ "title": "Контакты",
+ "description": "Управление списком контактов и обмен/импорт идентичностей.",
+ "search_placeholder": "Поиск контактов...",
+ "actions": "Действия",
+ "no_contacts": "Контакты не найдены",
+ "load_more": "Загрузить еще",
+ "add_contact": "Добавить контакт",
+ "contact_name_optional": "Имя контакта (необязательно)",
+ "contact_name_placeholder": "например, Полевой узел",
+ "hash_or_uri": "LXMF-хэш или URI",
+ "hash_or_uri_placeholder": "32-символьный хэш, lxmf://... или lxma://...",
+ "paste": "Вставить",
+ "failed_load_contacts": "Не удалось загрузить контакты",
+ "invalid_contact_input": "Недопустимый ввод. Используйте 32-символьный хэш или URI lxma://.",
+ "contact_already_exists": "Контакт уже существует",
+ "contact_added": "Контакт добавлен",
+ "failed_add_contact": "Не удалось добавить контакт",
+ "remove_contact": "Удалить контакт",
+ "remove_contact_confirm": "Удалить этот контакт?",
+ "contact_removed": "Контакт удален",
+ "failed_remove_contact": "Не удалось удалить контакт",
+ "share_contact": "Поделиться URI контакта",
+ "copy_contact_uri": "Копировать URI контакта",
+ "contact_uri_copied": "URI контакта скопирован в буфер обмена",
+ "failed_build_contact_uri": "Не удалось создать URI для этого контакта",
+ "share_my_identity": "Поделиться моей идентичностью",
+ "identity_uri_copied": "URI идентичности скопирован в буфер обмена",
+ "share": "Поделиться",
+ "scan_qr": "Сканировать QR-код",
+ "scanner_hint": "Наведите камеру на QR-код идентичности.",
+ "camera_not_supported": "Сканирование QR камерой не поддерживается в этом браузере.",
+ "camera_failed": "Не удалось запустить камеру.",
+ "qr_scanned": "QR-код отсканирован",
+ "importing_lxma": "Импорт контакта LXMA..."
},
"about": {
"title": "О программе",
@@ -396,6 +449,7 @@
"manage": "Управление",
"description": "Поиск, фильтрация и экспорт ваших адаптеров Reticulum.",
"add_interface": "Добавить интерфейс",
+ "edit_interface": "Редактировать интерфейс",
"import": "Импорт",
"export_all": "Экспорт всех",
"search_placeholder": "Поиск по имени, типу, хосту...",
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────